
package com.jf.cloud.product.mapper;

import com.jf.cloud.common.product.dto.ProductSearchDTO;
import com.jf.cloud.common.product.dto.SkuDTO;
import com.jf.cloud.common.product.vo.SkuAddrVO;
import com.jf.cloud.common.product.vo.SkuVO;
import com.jf.cloud.product.dto.StockBillLogItemDTO;
import com.jf.cloud.product.model.Sku;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * sku信息
 *
 * @author zz
 * @date 2020-10-28 15:27:24
 */
public interface SkuMapper {

    /**
     * 保存sku信息
     *
     * @param sku sku信息
     */
    void save(@Param("sku") Sku sku);

    /**
     * 更新sku信息
     *
     * @param sku sku信息
     */
    void update(@Param("sku") Sku sku);

    /**
     * 根据sku信息id删除sku信息
     *
     * @param skuId
     */
    void deleteById(@Param("skuId") Long skuId);

    /**
     * 根据spuId获取sku信息
     *
     * @param spuId id
     * @return 返回sku信息
     */
    List<SkuVO> listSkuWithAttrBySpuId(@Param("spuId") Long spuId);

    /**
     * 根据spuId获取sku信息(包含删除的）
     *
     * @param spuId id
     * @return 返回sku信息
     */
    List<SkuVO> listAllSkuWithAttrBySpuId(@Param("spuId") Long spuId);

    /**
     * 批量保存
     *
     * @param skuList
     */
    void saveBatch(@Param("skuList") List<SkuDTO> skuList);


    /**
     * 批量复制相关商品信息保存
     * @param skuList 商品信息
     */
    void batchCopySkuList(@Param("skuList") List<SkuVO> skuList);

    /**
     * 根据spuId删除sku信息
     *
     * @param spuId spuId
     */
    void updateBySpuId(Long spuId);

    /**
     * 批量修改
     *
     * @param skus 修改后的信息
     */
    void updateBatch(@Param("skus") List<Sku> skus);


    /**
     * 根据skuid获取sku信息
     *
     * @param skuId
     * @return
     */
    SkuVO getSkuBySkuId(@Param("skuId") Long skuId);

    /**
     * 根据skuId列表查找库存信息，赠品使用无缓存
     *
     * @param skuIds
     * @return
     */
    List<SkuVO> getSkuBySkuIds(@Param("skuIds") List<Long> skuIds);

    /**
     * 获取导出的sku
     * @param product
     * @return
     */
    List<SkuVO> listExportSku(@Param("product")ProductSearchDTO product);

    /**
     * 获取excel导出sku数据列表
     *
     * @param spuIds
     * @return
     */
    List<SkuVO> excelSkuList(@Param("spuIds") List<Long> spuIds);


    /**
     * 获取excel导出sku数据列表(过滤掉下架和删除的sku)
     *
     * @param spuIds
     * @return
     */
    List<SkuVO> getSkuList(@Param("spuIds") List<Long> spuIds);

    /**
     * 获取指定sku的价格
     *
     * @param skuIds
     * @return
     */
    List<SkuVO> listSkuPriceByIds(@Param("skuIds") List<Long> skuIds);


    /**
     * 根据skuId列表获取商品订单修改地址所需信息
     * @param skuIds skuId列表
     * @return sku列表
     */
    List<SkuAddrVO> listSpuDetailByIds(@Param("skuIds") List<Long> skuIds);

    /**
     * 根据skuId列表获取售价最低的商品的售价
     * @param skuIds
     * @return
     */
    Long getMinPriceFeeByIds(@Param("skuIds") List<Long> skuIds);

    /**
     * 根据商品id和供应商skuId获取代销sku售价
     * @param skuId
     * @param supplierSkuId
     * @return
     */
    Long getPriceFeeBySpuIdAndSupplierSkuId(@Param("spuId")Long skuId,@Param("supplierSkuId") Long supplierSkuId);


    /**
     * 根据供应商品skuId和spuId获取代销商品skuId
     * @param supplierSkuId
     * @param spuId
     * @return
     */
    Long getSkuIdBySupplierSkuId(@Param("supplierSkuId") Long supplierSkuId,@Param("spuId") Long spuId);

    /**
     * 根据skuid获取sku信息
     *
     * @param skuIdList
     * @return
     */
    List<SkuVO> getSkuBatch(@Param("skuIdList") List<Long> skuIdList);

    /**
     * 根据商品编码获取商品规格列表
     * @param partyCodeList 商品编码
     * @return 商品信息
     */
    List<SkuVO> listByPartyCodeList(@Param("partyCodeList") List<String> partyCodeList);

    /**
     * 根据商品编码和店铺id获取
     * @param partyCode
     * @param shopId
     * @return
     */
    StockBillLogItemDTO getSkuByPartyCodeAndShopId(@Param("partyCode") String partyCode, @Param("shopId")Long shopId);

    /**
     * 根据spuId获取sku
     * @param spuId
     * @return
     */
    List<SkuVO> getBySpuId(@Param("spuId")Long spuId);

    /**
     * 获取当前商家的所有sku编码
     * @param shopId
     * @param sysType
     * @param spuId
     * @return
     */
    List<String> listSkuPartyCodesByShopId(@Param("shopId") Long shopId, @Param("sysType") Integer sysType, @Param("spuId") Long spuId);

    /**
     * 根据spuId和供应商skuId获取skuId
     * @param spuId
     * @param supplierSkuId
     * @return
     */
    Long getSkuIdBySpuIdAndSupplierSkuId(@Param("spuId") Long spuId,@Param("supplierSkuId") Long supplierSkuId);


    /**
     * 获取商品库存预警数量
     * @param product 商品筛选
     * @return
     */
    Integer getStockWarningNum(@Param("product") ProductSearchDTO product);

    /**
     * 根据供应商skuId获取代销skuId列表
     * @param supplierSkuId
     * @return
     */
    List<Long> getSkuIdsBySupplierSkuId(@Param("supplierSkuId") Long supplierSkuId);

    /**
     * 根据供应商skuId，获取代销skuId
     * @param skuIds
     * @return
     */
    List<SkuVO> listSkuPriceBySupplierSkuIds(@Param("skuIds") List<Long> skuIds);

    /**
     * 获取Sku属性信息
     * @param skuId
     * @return
     */
    SkuVO listSkuWithAttrBySkuId(@Param("skuId") Long skuId);

    /**
     * 根据店铺id和商品编码获取skuId列表
     * @param partyCode 商品编码
     * @param shopId 店铺id
     * @return skuId列表
     */
    List<SkuVO> listSkuByPartyCodeAndShopId(@Param("partyCode") String partyCode, @Param("shopId") Long shopId);


    /**
     * 库存查询
     * @param product
     * @return
     */
    List<SkuVO> pageSku( @Param("product") ProductSearchDTO product);

    /**
     * 通过skuIds获取sku列表
     * @param skuIds
     * @return
     */
    List<SkuDTO> listSkuDTOBySkuIds(@Param("skuIds") List<Long> skuIds);
}
